<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;
use App\models\Permission;
use App\models\Role;

use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;



class RoleController extends Controller
{

    //返回角色授权页面
    public function auth($id)
    {

        //获取当前要授权的角色
        $role = Role::find($id);

        //获取所有的权限
        //$perms = $role->permission;
        $perms = Permission::get();
        //dd($perms);

//        获取当前角色已经拥有的权限
        $own_pers = DB::table('permission_role')->where('rid',$id)->lists('pid');
        //dd($own_pers);


//        返回给角色授权视图

        return view('admin.role.auth',compact('role','perms','own_pers'));
    }


    //处理用户授权
    public function doAuth(Request $request)
    {

//        1 接受表单传过来的值
        $input = $request->except('_token');
//        dd($input);
//          删除当前角色已经拥有的权限
        DB::table('permission_role')->where('rid', '=', $input['rid'])->delete();
//        2 将最新的当前角色的id和授予的权限添加到permission_role表中，给角色授权
        foreach ($input['pid'] as $v){
            DB::table('permission_role')->insert(['pid'=>$v,'rid'=>$input['rid']]);
        }

        //如果授权成功，返回授权页面
        return redirect('admin/role')->with('msg','授权成功');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        // 接收搜索内容
        $keywords = $request->input('keywords') ? $request->input('keywords') : '';

        // 接收分页页数
        $count = $request->input('count') ? $request->input('count') : '3';

        // 接收所有参数
        $res = $request -> all();
        // 按条件查询信息
        $roles = Role::where('rname','like','%'.$keywords.'%')->paginate($count);

        return view('admin.role.index',compact('roles','count','keywords','res'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('admin.role.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        // 1 接受客户端提交过来的数据
        // 2 做表单数据验证
        // 3 执行添加操作
        // 4 根据结果做逻辑处理，添加成功跳转到列表页，添加失败返回到添加页
        //   获取前台表单提交的数据的第一种方法
        $input = $request->except('_token');

        //记住这个地方返回的是刚添加的那条记录
        
        $res = Role::create($input);


        if($res){
            return redirect('admin/role');
        }else{
            return back()->with('msg','添加失败');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        // 查取一条信息
        $data = Role::find($id);
        // dd($data);
        return view('admin.role.edit',compact('data'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        // 接收表单提交内容
        $rname = $request->input('rname');
        $description = $request->input('description');

        // 查询修改哪条内容
        $data = Role::find($id);
        // dd($data);
        // 修改内容
        $data->rname = $rname;
        $data->description = $description;
        // 判断是否修改成功
        if($data->save()){
            return redirect('/admin/role');
        }else{
            return back()->with('msg','修改失败');
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        $data = [];
        $res = Role::find($id)->delete();
        if($res){
            $data=[
                'status'=>0,
                'msg'=>'删除成功'
            ];
        }else{
            $data=[
                'status'=>1,
                'msg'=>'删除失败'
            ];
        }
        return $data;
    }
    
}
